#encoding=utf-8
from graphviz import Digraph

dot = Digraph(comment='用户数据处理及匹配流程', format='png')

# 定义节点
dot.node('A', '用户上传数据<br>(照片及资料)')
dot.node('B', '数据预处理')
dot.node('C1', '照片预处理<br>（人脸检测、对齐）')
dot.node('C2', '资料预处理<br>（数值化、归一化）')
dot.node('D1', '图像特征提取<br>(FaceNet等)')
dot.node('D2', '文本特征抽取<br>(NLP模型)')
dot.node('E1', '生成特征向量<br>\(\mathbf{f}_i\)')
dot.node('E2', '生成多维特征数据')
dot.node('F', '图像匹配得分计算<br>\(S_{img}=e^{-d(\mathbf{f}_{pref},\mathbf{f}_i)}\)')
dot.node('G', '资料匹配得分计算<br>\(S_{info}=\sum_{k}w_k\cdot S_k\)')
dot.node('H', '综合匹配评分<br>\(S_{total}=\lambda S_{img}+(1-\lambda)S_{info}\)')
dot.node('I', '大语言模型<br>生成评估报告')

# 定义边
dot.edges([
    ('A', 'B'),
    ('B', 'C1'),
    ('B', 'C2'),
    ('C1', 'D1'),
    ('C2', 'D2'),
    ('D1', 'E1'),
    ('D2', 'E2'),
    ('E1', 'F'),
    ('E2', 'G'),
    ('F', 'H'),
    ('G', 'H'),
    ('H', 'I')
])

# 渲染生成图片
dot.render('user_data_processing_flow', view=True)